﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Utilities.Common;

namespace BLGPS
{
    public class Permiso
    {
        private string mNombre;

        public string Nombre
        {
            get { return mNombre; }
            set { mNombre = value; }
        }
        private int mId;
        [IsId]
        public int Id
        {
            get { return mId; }
            set { mId = value; }
        }


        private static Permiso s_Basico = new Permiso(1, "Basico");
        public static Permiso Basico { get { return s_Basico; } }
                        

        private static Permiso s_ABMVehiculoEmpresa = new Permiso(2, "ABMVehiculoEmpresa");
        public static Permiso ABMVehiculoEmpresa { get { return s_ABMVehiculoEmpresa; } }


        private static Permiso s_ABMVehiculoIntranet = new Permiso(3, "ABMVehiculoIntranet");
        public static Permiso ABMVehiculoIntranet { get { return s_ABMVehiculoIntranet; } }

        
        private static Permiso s_ABMChofer = new Permiso(4, "ABMChofer");
        public static Permiso ABMChofer { get { return s_ABMChofer; } }

        private static Permiso s_ABMDispositivo = new Permiso(5, "ABMDispositivo");
        public static Permiso ABMDispositivo { get { return s_ABMDispositivo; } }
  

#warning agregar permisos              

        public Permiso(int id, string nombre)
        {
            Id = id;
            Nombre = nombre;
        }
    }

    public class ColeccionPermisos : List<Permiso>
    {
        public bool TienePermiso(Permiso p)
        {
            if (p == null) return true;
            foreach (Permiso m in this)
            {
                if (m.Id == p.Id) return true;
            }
            return false;
        }

        #region Singleton
        private static ColeccionPermisos s_Permisos;

        public static ColeccionPermisos Permisos
        {
            get
            {
                if (s_Permisos == null)
                {
                    s_Permisos = new ColeccionPermisos() { Permiso.ABMVehiculoEmpresa, Permiso.ABMVehiculoIntranet, Permiso.ABMChofer };
                }
                return s_Permisos;
            }
        }

        public Permiso ObtenerPorId(decimal pId)
        {
            foreach (Permiso m in this)
            {
                if (m.Id == pId) return m;
            }
            return null;
        }
        #endregion


        public ColeccionPermisos CargarPermisosPorUsuario(Usuario usuario)
        {
            ColeccionPermisos coleccion = new ColeccionPermisos();
            DataTable dt = BaseDatos.DB.ExecuteSQL("Select idPermiso from Permiso_Usuario where idUsuario=" + usuario.Id.ToString());
            foreach (DataRow item in dt.Rows)
            {
                coleccion.Add(ColeccionPermisos.Permisos.ObtenerPorId(decimal.Parse(item["idPermiso"].ToString())));
            }
            return coleccion;
        }
    }
}